﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Seguridad.ControlExeption;
using Crosland.Automotriz.Facade.Facade;
using System.Configuration;
using System.Net.Mail;
using Crosland.Automotriz.Logic;
namespace Crosland.Automotriz.Web.canibalizacion
{
    public partial class wFrmCanibalizacionAprobar : System.Web.UI.Page
    {
        private int intIdNegocio = Convert.ToInt32(ConfigurationManager.AppSettings["Negocio"]);
        private iFacadeCanibalizacion facedeCanibalizacion = null;
        private MailMessage mail = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {
                Panel img = (Panel)Master.FindControl("asp");
                img.Visible = false;
                Panel img2 = (Panel)Master.FindControl("pnlTop");
                img2.Visible = false;
                this.ListaEstado();
                this.ListarCab();

            }
        }





        private void ListaEstado()
        {
            facedeCanibalizacion = new FacadeCanibalizacion();
            cboEstado.DataSource = facedeCanibalizacion.ListaEstadoSolicitado();
            cboEstado.TextField = "DES_CORTA";
            cboEstado.ValueField = "ID_GENERAL_DET";
            cboEstado.DataBind();

            cboEstado.Value = "147".ToString();

        }



        /*  Listado de canibalización */

        private void ListarCab()
        {
            facedeCanibalizacion = new FacadeCanibalizacion();
            try
            {
                grdCanibalizacionListado.DataSource = facedeCanibalizacion.listarPorEstadoPendiente(Convert.ToInt32(cboEstado.Value));
                grdCanibalizacionListado.DataBind();
            }
            catch (Automotriz.Logic.ControlExeption.DataException ex)
            {

                GuardarExceptionLog(ex.Message, ex, "ListarCab");
                MensajesError(ex.Message, ex, "ListarCab");
            }
            catch (Exception ex)
            {

                GuardarExceptionLog(ex.Message, ex, "ListarCab");
                MensajesError(ex.Message, ex, "ListarCab");

            }

        }




        private void AprobarSolicitud()
        {

            try
            {
                facedeCanibalizacion = new FacadeCanibalizacion();
                bool blResultado = false;
                int idCab = Convert.ToInt32(grdCanibalizacionListado.GetRowValues(grdCanibalizacionListado.FocusedRowIndex, "ID_LOG_CANIBALIZACION_CAB"));
                blResultado = facedeCanibalizacion.ActualizaEstado_LOG_CANIBALIZACION_CAB(148, idCab);

                if (blResultado)
                {
                    this.ConfirmaAprobacion();
                    this.ListarCab();
                    PopupCorreo.ShowOnPageLoad = false;
                    lblmsj.Text = "Se Aprobó correctamente";
                    popupmsj.ShowOnPageLoad = true;

                }
            }
            catch (Exception ex)
            {

                GuardarExceptionLog(ex.Message, ex, "AprobarSolicitud");
                MensajesError(ex.Message, ex, "AprobarSolicitud");
            }

        }





        private void ConfirmaAprobacion()
        {
            String strMailSession = Session["Correo_user"].ToString();
            int intIndex = grdCanibalizacionListado.FocusedRowIndex;
            String Nro_Chasis = grdCanibalizacionListado.GetRowValues(intIndex, "VIN").ToString();
            String strNomUsuario = grdCanibalizacionListado.GetRowValues(intIndex, "NOMBRE_APELLIDOS").ToString();
            String strCorreo = grdCanibalizacionListado.GetRowValues(intIndex, "CORREO").ToString();
            String htmBody = String.Format(HtmlEmail.EnvioSolitudMotosCanibalizar, strNomUsuario, " Su solicitud ha sido <b>APROBADO</b> correctamente <b> Nro.VIN : " + Nro_Chasis + "</b>", txtObservacion.Text);
            Tools.SendEmail(strCorreo,strMailSession, "Confirmación de  Aprobación Motos a Canibalizar", htmBody);
        }

        private void RechazoAprobacion()
        {
            try
            {
                facedeCanibalizacion = new FacadeCanibalizacion();
                bool blResultado = false;
                int idCab = Convert.ToInt32(grdCanibalizacionListado.GetRowValues(grdCanibalizacionListado.FocusedRowIndex, "ID_LOG_CANIBALIZACION_CAB"));
                blResultado = facedeCanibalizacion.ActualizaEstado_LOG_CANIBALIZACION_CAB(155, idCab);
                if (blResultado)
                {
                    this.ListarCab();
                    String strMailSession = Session["Correo_user"].ToString();
                    int intIndex = grdCanibalizacionListado.FocusedRowIndex;
                    String Nro_Chasis = grdCanibalizacionListado.GetRowValues(intIndex, "VIN").ToString();
                    String strNomUsuario = grdCanibalizacionListado.GetRowValues(intIndex, "NOMBRE_APELLIDOS").ToString();
                    String strCorreo = grdCanibalizacionListado.GetRowValues(intIndex, "CORREO").ToString();
                    String htmBody = String.Format(HtmlEmail.EnvioSolitudMotosCanibalizar, strNomUsuario, " Su solicitud ha sido <b>RECHAZADO</b> <b> Nro.VIN : " + Nro_Chasis + "</b>", txtObservacion.Text);
                    Tools.SendEmail(strCorreo, strMailSession, "Confirmación de  Aprobación Motos a Canibalizar", htmBody);

                    PopupCorreo.ShowOnPageLoad = false;
                    lblmsj.Text = "Se Rechazó correctamente";
                    popupmsj.ShowOnPageLoad = true;
                }
            }
            catch (Exception ex)
            {

                GuardarExceptionLog(ex.Message, ex, "RechazoAprobacion");
                MensajesError(ex.Message, ex, "RechazoAprobacion");
            }
            
        }

        private void ValidarAprobacion()
        {


            int intIndex = grdCanibalizacionListado.FocusedRowIndex;

            if (intIndex == -1)
            {

                lblmsj.Text = "Seleccione un registro";
                popupmsj.ShowOnPageLoad = true;
                return;
            }
            PopupCorreo.ShowOnPageLoad = true;



        }


        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e)
            {

                MensajesError(e.Message, e, "GuardarExceptionLog");
            }
            catch (RunException re)
            {
                MensajesError(re.Message, re, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }



        protected void grdCanibalizacionListado_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListarCab();
        }




        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            this.ListarCab();
        }

        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            this.AprobarSolicitud();
        }



        protected void btnSolicitar_Click(object sender, EventArgs e)
        {
            int intIndex = grdCanibalizacionListado.FocusedRowIndex;
            if (intIndex == -1)
            {
                lblmsj.Text = "Seleccione un registro";
                popupmsj.ShowOnPageLoad = true;
                return;
            }
            int intIdEstado = Convert.ToInt32(grdCanibalizacionListado.GetRowValues(intIndex, "ID_ESTADO"));
            if (intIdEstado != 147)
            {
                lblmsj.Text = "No puede solicitar Aprobación El estado no es Pendiente";
                popupmsj.ShowOnPageLoad = true;
                return;
            }
            else
            {
                PopupCorreo.ShowOnPageLoad = true;
            }
        }

        protected void btnAprobar_Click(object sender, EventArgs e)
        {
            ValidarAprobacion();
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id=" + intIdNegocio);
        }

        protected void btnRechazar_Click(object sender, EventArgs e)
        {
            this.RechazoAprobacion();
        }
    }
}